<?php namespace Common\Model;
use Hdphp\Model\Model;
class Cate extends Model{
	//指定表名
	protected $table='shop_category';
	//自动验证
	protected $validate=array(
//		array(字段名,验证方法,错误信息,验证条件,验证时间)
		array('cname','required','分类名称不能为空',3,3),
	);
	//分类添加
	public function store(){
		//1.create之后$this->data才会有数据
		//2.create会触发自动验证
		if($this->create()){
			//p($this->data);exit;
			//添加add方法所需要的数据就是$this->data里面的数据
			$this->add();
			return true;
		}
		return false;
	}
	//编辑分类
	public function  edit(){
		if(!$this->create()) return false;
		//修改，需要在页面加隐藏域
		$this->save();
		return true;
	}
	
	//获得除了自己和自己的子集的分类数据
	public function getNoMy($cid){
	   	$cids=$this->getSon($this->get(),$cid);
//	压入自己的cid
	$cids[]=$cid;
	//排除自己和子集的cid的数据
	$where="cid NOT IN(".implode(',', $cids).")";
	return $this->where($where)->get();
	}
	
	//递归方法，获得去掉顶级分类后的子集分类，获得子集
	public function getSon($data,$cid){
	    $temp=array();
		//循环所有数据
		foreach($data as $v){
			//如果 找到当前分类的子集
			if($v['pid']==$cid){
				//压入到临时 数组
				$temp[]=$v['cid'];
				//递归调用 不断合并，注意这里的 $data参数是传过来的数据get的数据，是所有的数据组成的2维数组
				$temp=array_merge($temp,$this->getSon($data,$v['cid']));
			}
		}
		//得到最终的结果，返回
		return $temp;
	}
	
	
	//获得分类的所有的数据
	public function getAll(){
	    $data=$this->get();
//		下面的tree函数不需要写，主键和父键，因为默认整个也是cid和pid
		return Data::tree($data,'cname');
	}
	
	
	public function getFather($data,$pid){
	    $temp=array();
		foreach ($data as $k => $v) {
			if($v['cid']==$pid){
				$temp[]=$this->where("cid={$v['cid']}")->find();
				$temp=array_merge($temp,$this->getFather($data,$v['pid']));
			}
		}
		return $temp;
	}
}
